"""2、设计一个类 Person，需满足以下要求：
属性设计：根据人员的实际特性，设计并实现必要的属性（如姓名、性别。。。等），并为每个属性设置合理的访问控制（私有、只读、可修改等）。
构造方法：实现一个构造方法，用于初始化Person对象的基本属性。
核心方法：实现以下方法，模拟人员的基本操作，比如：
getup()：起床
eat(foodname)：吃饭。
speak(content)：说话。
。。。。
约束条件：
请自行设计一些约束条件，比如：
1）睡觉时不能吃饭。
。。。
"""

class Person:
    def __init__(self, name, gender, age):
        self._name = name  # 私有属性
        self.gender = gender  # 可修改属性
        self.age = age  # 可修改属性
        self._is_sleeping = False  # 私有属性，表示是否在睡觉

    @property
    def name(self):
        return self._name

    def getup(self):
        self._is_sleeping = False
        print(f"{self._name}起床了")

    def eat(self, foodname):
        if self._is_sleeping:
            print(f"{self._name}正在睡觉，不能吃饭")
        else:
            print(f"{self._name}正在吃{foodname}")

    def speak(self, content):
        if self._is_sleeping:
            print(f"{self._name}正在睡觉，不能说话")
        else:
            print(f"{self._name}说：{content}")

    def sleep(self):
        self._is_sleeping = True
        print(f"{self._name}去睡觉了")

a=Person("1","男",18)
a.eat("1")
a.getup()
a.name
print(a.gender)

#a.gender​​ 是正确的，因为 gender 是一个普通属性，直接赋值和访问。
#​#a.gender() 会报错​​，因为 gender 不是方法，不能加括号调用。

"""a.name() 会报错是因为：
1. 在 `a.py` 中， name 是通过 @property 装饰器定义的属性，而不是方法
2. @property 将方法转换为属性访问，所以应该直接使用 a.name 而不是 a.name()
"""

